/*
 * Copyright/Licensing information.
 */

/* inclusion guard */
#ifndef __ECV_VI_H__
#define __ECV_VI_H__

/*
 * Glib includes
 */
#include <glib-object.h>

/*
 * Potentially, include other headers on which this header depends.
 */

#include <stdio.h>

/*
 * Type macros.
 */
#define ECV_TYPE_VI                  (ecv_vi_get_type ())
#define ECV_VI(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), ECV_TYPE_VI, EcvVi))
#define ECV_IS_VI(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ECV_TYPE_VI))
#define ECV_VI_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), ECV_TYPE_VI, EcvViClass))
#define ECV_IS_VI_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), ECV_TYPE_VI))
#define ECV_VI_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), ECV_TYPE_VI, EcvViClass))

typedef struct _EcvVi        EcvVi;
typedef struct _EcvViClass   EcvViClass;
typedef struct _EcvViPrivate EcvViPrivate;

struct _EcvVi
{
  GObject parent_instance;

  /*< public >*/

  /*< private >*/
  EcvViPrivate *priv;
};

struct _EcvViClass
{
  GObjectClass parent_class;

  /* class members */
  /*< public >*/

  //------------------------------------------------
  /*                   virtual                    */
  void (*create) (EcvVi *self);
  void (*run) (EcvVi *self);
  void (*step_begin) (EcvVi *self);
  void (*step_end) (EcvVi *self);
  char * (*get_data) (EcvVi *self);
  int (*get_data_size) (EcvVi *self);
  int (*failed) (EcvVi * self);
};

/* used by ECV_TYPE_VI */
GType ecv_vi_get_type (void);

/*
 * Method definitions.
 */

void 
ecv_vi_create (EcvVi *self);

void 
ecv_vi_run (EcvVi *self);

void 
ecv_vi_step_begin (EcvVi *self);

void 
ecv_vi_step_end (EcvVi *self);

char * 
ecv_vi_get_data (EcvVi *self);

int 
ecv_vi_get_data_size (EcvVi *self);

int
ecv_vi_failed(EcvVi * self);

EcvVi * 
ecv_vi_new ();

#endif /* __ECV_VI_H__ */
